//SMTP发邮件服务
const { qq } = require('../config/config')
const nodemailer = require('nodemailer')

const transporter = nodemailer.createTransport({
    service: 'qq',
    auth: {
        user: qq.email,
        pass: qq.pass
    }
})
//验证码漏洞
//用户发送完验证码后需要将邮箱和验证码进行对应 
//这里使用map进行存储，邮箱为key，验证码为值，并且需要存储一个过期事件，
// 验证完后需要删除 有人再次生成验证码时 计算过期时间，将过期的项目删除
 

let codeMap = new Map();
// 生成
function genCodeMap(email){
    let Nodecode = ''
    for (let i = 0; i < 6; i++) {
        Nodecode += Math.floor(Math.random() * 10)
    }
    codeMap.set(email,{
        Nodecode,
        expire:Date.now()+1000*60*3
    }) 
    console.log(codeMap.get(email),"codemap");
    //生成验证码时 检查当前验证码队列 删除过期的
    validaCodeTimeOut()
    console.log(codeMap.get(email),"codemap");
} 
// 验证过期时间
function validaCodeTimeOut(){ 
        let now = Date.now()
        codeMap.forEach((value,key)=>{
            //如果现在的时间 减去发送时间超过3分钟 则删除
            if(now-value.expire>1000*60*3){
                codeMap.delete(key)
            }
        }) 
        console.log(codeMap,codeMap.size,"codemap");
}
// 删除
function deleteCode(email){
    codeMap.delete(email)
}
module.exports.emailSign = function (email, res) {
    console.log("2830904279@qq.com");
    // Nodecode = ''
    // for (let i = 0; i < 6; i++) {
    //     Nodecode += Math.floor(Math.random() * 10)
    // }
    genCodeMap(email)
    //60,秒过期
    // setTimeout(() => {
    //     Nodecode = ''
    // }, 1000 * 60 * 3)
    console.log(codeMap.get(email).Nodecode, 'Nodecode');
    let option = {
        from: '2830904279@qq.com',
        subject: 'yike验证',
        to: email,
        html: `<span>yike注册页面<h2>验证码${codeMap.get(email).Nodecode},验证码三分钟内有效。</h2></span>`
    }
    transporter.sendMail(option, (err, msg) => {
        if (err) {
            res.send({ status: 500 })
            // console.log('发送失败', err);
        }
        else {
            res.send({ status: 200 })
            console.log('发送成功',codeMap.get(email).Nodecode);
        }
    })
    // return '发送成功，通过手机查看，并填写验证'
}
//需要邮箱和code进行匹配
module.exports.validaCode = (code,email, res) => {
    // console.log(code);
    // Nodecode=111111 //验证码写死测试
    console.log(code,email,"code email");

    if (codeMap.get(email).Nodecode) {
        console.log("开始验证");
        if (code == codeMap.get(email).Nodecode) {
            console.log("验证成功");
            //验证成功 删除
            deleteCode(email)
            res.send({ status: 200 })
        } else {
            console.log("验证失败");
            res.send({ status: 500 })
        }
    } else {
        console.log("没有生成验证码");
        res.send({ status: 500 })
        return;
    }

}
